﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAO;
using System.Data;
using System.Configuration;
using LogicaNegocio.Properties;
using System.Data.OleDb;



namespace LogicaNegocio
{
    public class Gestor
    {
        public static OleDbConnection Conectar()
        {
            try
            {
                OleDbConnection cn = null;
                string str = Settings.Default.DBAccess;
                cn = new OleDbConnection(str);
                cn.Open();
                return cn;
            }
            catch (OleDbException)
            {
                throw;
            }
        }
        public static List<Agenda> CargarGrillaReunionesPorFecha(string fecha1, string fecha2, Proyecto p)
        {
            OleDbConnection cn = null;
            List<Agenda> agenda = new List<Agenda>();
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;
                //cmd.CommandText = "Select a.id_reunion, a.fecha_hora_reunion, a.lugar, a.duracion_estimada, a.tipo_reunion_id, t.nombre_tipo_reunion from Agendas a INNER JOIN TipoReunion t ON a.tipo_reunion_id = t.id_tipo_reunion WHERE a.proyecto_id=" + p.IdProyecto + " AND (a.fecha_hora_reunion BETWEEN #" + fecha1.ToString() + "# AND #" + fecha2.ToString() + "#)";
                cmd.CommandText = "Select a.id_reunion, a.fecha_hora_reunion, a.lugar, a.duracion_estimada, a.tipo_reunion_id, t.nombre_tipo_reunion from Agendas a INNER JOIN TipoReunion t ON a.tipo_reunion_id = t.id_tipo_reunion WHERE a.proyecto_id=@IdProyecto AND (a.fecha_hora_reunion BETWEEN @fecha1 AND @fecha2)";
                cmd.Parameters.AddWithValue("@IdProyecto", p.IdProyecto);
                cmd.Parameters.AddWithValue("@fecha1", fecha1);
                cmd.Parameters.AddWithValue("@fecha2", fecha2);
                OleDbDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    Agenda a = new Agenda();
                    a.IdReunion = dr.GetInt32(dr.GetOrdinal("id_reunion"));
                    a.FechaHoraReunion = Convert.ToDateTime(dr["fecha_hora_reunion"].ToString());
                    a.Lugar = dr["lugar"].ToString();
                    //a.Participantes = dr["participante"].ToString();
                    a.DuracionEstimada = dr.GetInt32(dr.GetOrdinal("duracion_estimada"));
                    a.TipoReunionId = int.Parse(dr["tipo_reunion_id"].ToString());
                    a.TipoReunionNombre = dr["nombre_tipo_reunion"].ToString();
                    //a.ProyectoId = int.Parse(dr["proyecto_id"].ToString());
                    agenda.Add(a);
                }
                dr.Close();
            }
            catch (Exception ex)
            {
            }
            finally
            {
                if (cn != null)
                    cn.Close();
            }
            return agenda;
        }

        public static List<Agenda> CargarGrillaReuniones(Proyecto p)
        {
            OleDbConnection cn = null;
            List<Agenda> agenda = new List<Agenda>();
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;
                cmd.CommandText = "Select TOP 10 a.id_reunion, a.fecha_hora_reunion, a.lugar, a.duracion_estimada, a.tipo_reunion_id, t.nombre_tipo_reunion from Agendas a, TipoReunion t WHERE a.tipo_reunion_id=t.id_tipo_reunion AND a.proyecto_id=@IdProyecto ORDER BY a.fecha_hora_reunion DESC";
                cmd.Parameters.AddWithValue("@IdProyecto", p.IdProyecto);
                //cmd.Parameters.Add(new OleDbParameter("@IdProyecto", p.IdProyecto));
                OleDbDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    Agenda a = new Agenda();
                    a.IdReunion = dr.GetInt32(dr.GetOrdinal("id_reunion"));
                    a.FechaHoraReunion = Convert.ToDateTime(dr["fecha_hora_reunion"].ToString());
                    a.Lugar = dr["lugar"].ToString();
                    //a.Participantes = dr["participante"].ToString();
                    a.DuracionEstimada = dr.GetInt32(dr.GetOrdinal("duracion_estimada"));
                    a.TipoReunionId = int.Parse(dr["tipo_reunion_id"].ToString());
                    a.TipoReunionNombre = dr["nombre_tipo_reunion"].ToString();
                    agenda.Add(a);
                }
                dr.Close();
            }
            catch (Exception)
            {
            }
            finally
            {
                if (cn != null)
                    cn.Close();
            }
            return agenda;
        }
        public static void InsertarAgenda(Agenda a, Proyecto p, List<Usuario> lista)
        {
            OleDbConnection cn = null;
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;
                if (a.IdReunion == 0)
                {
                    //cmd.CommandText = "Insert into Agendas (lugar, fecha_hora_reunion, duracion_estimada, tipo_reunion_id, proyecto_id) VALUES ('@Lugar" + a.Lugar + "', '" + a.FechaHoraReunion.ToString() + "', " + a.DuracionEstimada + ", " + a.TipoReunionId + ", " + p.IdProyecto + ")";
                    cmd.CommandText = "Insert into Agendas (lugar, fecha_hora_reunion, duracion_estimada, tipo_reunion_id, proyecto_id) VALUES (@Lugar, @FechaHoraReunion, @DuracionEstimada, @TipoReunionId, @IdProyecto)";

                    cmd.Parameters.AddWithValue("@Lugar", a.Lugar);
                    cmd.Parameters.AddWithValue("@FechaHoraReunion", a.FechaHoraReunion);
                    cmd.Parameters.AddWithValue("@DuracionEstimada", a.DuracionEstimada);
                    cmd.Parameters.AddWithValue("@TipoReunionId", a.TipoReunionId);
                    cmd.Parameters.AddWithValue("@IdProyecto", p.IdProyecto);
                    cmd.ExecuteNonQuery();
                    cmd.Parameters.Clear();

                    cmd.CommandText = "SELECT @@IDENTITY";
                    int idReunion = int.Parse(cmd.ExecuteScalar().ToString());

                    if (lista != null)
                    {
                        int i = 0;
                        cmd = null;
                        cmd = new OleDbCommand();
                        cmd.Connection = cn;
                        foreach (Usuario user in lista)
                        {
                            i++;
                            cmd.CommandText = "INSERT INTO ParticipatesPorReunion(nombre_usuario, id_reunion) VALUES (@NombreUsuario, @IdReunion)";
                            cmd.Parameters.AddWithValue("@NombreUsuario", user.Nombre_usuario);
                            cmd.Parameters.AddWithValue("@IdReunion", idReunion);
                            cmd.ExecuteNonQuery();
                            cmd.Parameters.Clear();
                        }
                    }
                }
                else
                {
                    cmd.CommandText = "UPDATE Agendas SET lugar = @Lugar, fecha_hora_reunion = @FechaHoraReunion, duracion_estimada=@DuracionEstimada, tipo_reunion_id=@TipoReunionId where id_reunion=@IdReunion";
                    //cmd.CommandText = "UPDATE Agendas SET lugar = '" + a.Lugar + "', fecha_hora_reunion = '" + a.FechaHoraReunion.ToString() + "', duracion_estimada=" + a.DuracionEstimada + ", tipo_reunion_id=" + a.TipoReunionId + " where id_reunion=" + a.IdReunion;
                    cmd.Parameters.AddWithValue("@Lugar", a.Lugar);
                    cmd.Parameters.AddWithValue("@FechaHoraReunion", a.FechaHoraReunion);
                    cmd.Parameters.AddWithValue("@DuracionEstimada", a.DuracionEstimada);
                    cmd.Parameters.AddWithValue("@TipoReunionId", a.TipoReunionId);
                    cmd.Parameters.AddWithValue("@IdProyecto", p.IdProyecto);
                    cmd.ExecuteNonQuery();
                    cmd.Parameters.Clear();
                    if (lista != null || lista.Count > 0)
                    {
                        int i = 0;
                        foreach (Usuario user in lista)
                        {
                            i++;
                            cmd.CommandText = "INSERT INTO ParticipatesPorReunion(nombre_usuario, id_reunion) VALUES (@NombreUsuario, @IdReunion)";
                            cmd.Parameters.AddWithValue("@NombreUsuario", user.Nombre_usuario);
                            cmd.Parameters.AddWithValue("@IdReunion", a.IdReunion);
                            cmd.ExecuteNonQuery();
                            cmd.Parameters.Clear();
                        }
                    }
                }
            }
            catch (Exception e) { throw new Exception("Error al Guargar la agenda"); }
            finally { if (cn != null) cn.Close(); }
        }
        public static string MostrarNota(int idReunion)
        {
            string nota = null;
            OleDbConnection cn = null;
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;
                cmd.CommandText = "Select Nota FROM Agendas where id_reunion=@IdReunion";// +idReunion;
                cmd.Parameters.AddWithValue("@IdReunion", idReunion);
                //cmd.Parameters.Add(new OleDbParameter("@nota", nota));
                nota = cmd.ExecuteScalar().ToString();
            }
            catch (Exception e) { }
            finally { if (cn != null) cn.Close(); }
            return nota;
        }
        public static Boolean AgregarNota(int idReunion, string nota)
        {
            OleDbConnection cn = null;
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;
                cmd.CommandText = "Update Agendas SET nota=@nota where id_reunion=@IdReunion";// +idReunion;
                cmd.Parameters.AddWithValue("@nota", nota);
                cmd.Parameters.AddWithValue("@IdReunion", idReunion);
                cmd.ExecuteNonQuery();
                return true;
            }
            catch (Exception e) { return false; }
            finally { if (cn != null) cn.Close(); }

        }
        public static List<TipoReunion> CargarComboTipoReunion()
        {
            OleDbConnection cn = null;
            List<TipoReunion> lista = new List<TipoReunion>();
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;

                cmd.CommandText = "Select id_tipo_reunion, nombre_tipo_reunion FROM TipoReunion";
                OleDbDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    TipoReunion tr = new TipoReunion();
                    tr.IdTipoReunion = int.Parse(dr["id_tipo_reunion"].ToString());
                    tr.NombreTipoReunion = dr["nombre_tipo_reunion"].ToString();
                    lista.Add(tr);
                }
            }
            catch (Exception e) { }
            finally { cn.Close(); }
            return lista;

        }
        public static List<TipoReunion> CargarComboTipoReunion(int tipoProyecto)
        {
            OleDbConnection cn = null;
            List<TipoReunion> lista = new List<TipoReunion>();
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;

                //cmd.CommandText = "Select id_tipo_reunion, nombre_tipo_reunion FROM TipoReunion";
                //cmd.CommandText = "SELECT t.id_tipo_reunion, t.nombre_tipo_reunion " +
                //                    "FROM TipoReunion t INNER JOIN TipoReunionPorProyecto trp ON t.id_tipo_reunion=trp.id_tipo_reunionx " +
                //                    "WHERE trp.id_proyecto=" + tipoProyecto;
                cmd.CommandText = "SELECT t.id_tipo_reunion, t.nombre_tipo_reunion " +
                                    "FROM TipoReunion t INNER JOIN TipoReunionPorProyecto trp ON t.id_tipo_reunion=trp.id_tipo_reunionx " +
                                    "WHERE trp.id_proyecto=@TipoProyecto";// +tipoProyecto;
                cmd.Parameters.AddWithValue("@TipoProyecto", tipoProyecto);


                OleDbDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    TipoReunion tr = new TipoReunion();
                    tr.IdTipoReunion = int.Parse(dr["id_tipo_reunion"].ToString());
                    tr.NombreTipoReunion = dr["nombre_tipo_reunion"].ToString();
                    lista.Add(tr);
                }
            }
            catch (Exception e) { }
            return lista;

        }

        // para probar si era que no funcionaba leoTabla
        //public static DataTable ObtenerDatosTipoReunion()
        //{
        //    OleDbConnection cn = null;
        //    DataTable dt = new DataTable();
        //    try
        //    {
        //        cn = Conectar();
        //        OleDbCommand cmd = new OleDbCommand();
        //        cmd.Connection = cn;
        //        cmd.CommandText = "Select * FROM TipoReunion";
        //        dt.Load(cmd.ExecuteReader());
        //        cn.Close();
        //    }
        //    catch (Exception e) { }

        //    return dt;
        //}
        public static DataTable leoTabla(string tabla)
        {
            OleDbConnection cn = null;
            DataTable dt = new DataTable();
            try
            {
                cn = Conectar();
                OleDbCommand cmd1 = new OleDbCommand();
                cmd1.Connection = cn;
                cmd1.CommandText = "SELECT * FROM @Tabla";// + tabla;
                cmd1.Parameters.AddWithValue("@Tabla", tabla);
                dt.Load(cmd1.ExecuteReader());
                cn.Close();
            }
            catch (Exception ex)
            {
                dt = null;
            }

            return dt;
        }
        public static Boolean agregarTipoReunion(TipoDeReunion td)
        {
            OleDbConnection cn = null;
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;
                cmd.CommandText = "Insert into TipoReunion (nombre_tipo_reunion,descripcion_tipo_reunion) VALUES (@nombre, @descripcion)";
                cmd.Parameters.AddWithValue("@nombre", td.Nombre);
                cmd.Parameters.AddWithValue("@descripcion", td.Descripcion);

                cmd.ExecuteNonQuery();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }

        }
        public static Boolean ingresar(string usuario, string contraseña)
        {
            OleDbConnection cn = null;
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                DataTable dt = new DataTable();
                cmd.Connection = cn;
                cmd.CommandText = "Select u.password from Usuarios u where u.nombre_usuario = @Usuario";
                cmd.Parameters.AddWithValue("@Usuario", usuario);
                dt.Load(cmd.ExecuteReader());
                if (dt.Rows.Count > 0)
                {
                    if (dt.Rows[0][0].ToString() == contraseña)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    return false;
                }


            }
            catch (Exception e) { }
            finally { if (cn != null) cn.Close(); }
            return false;
        }

        public static Boolean agregarUsuario(Usuario u)
        {
            OleDbConnection cn = null;
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;
                cmd.CommandText = "Insert into Usuarios (nombre, nombre_usuario, [password]) VALUES (@nombre,@nombreUsuario, @pass)";
                cmd.Parameters.AddWithValue("@nombre", u.Nombre);
                cmd.Parameters.AddWithValue("@pass", u.Password);
                cmd.Parameters.AddWithValue("@nombreUsuario", u.Nombre_usuario);

                cmd.ExecuteNonQuery();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }

        }


        public static Agenda BuscarReunion(int id)
        {
            OleDbConnection cn = null;
            Agenda a = new Agenda();
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;

                cmd.CommandText = "Select a.id_reunion, a.fecha_hora_reunion, a.lugar, a.participante, a.duracion_estimada from Agendas a where a.id_reunion=@Id";// +id;
                cmd.Parameters.AddWithValue("@Id", id);
                OleDbDataReader dr = cmd.ExecuteReader();
                if (dr.Read())
                {
                    a.IdReunion = dr.GetInt32(dr.GetOrdinal("id_reunion"));
                    a.FechaHoraReunion = Convert.ToDateTime(dr["fecha_hora_reunion"].ToString());
                    a.Lugar = dr["lugar"].ToString();
                    //a.Participantes = dr["participante"].ToString();
                    a.DuracionEstimada = dr.GetInt32(dr.GetOrdinal("duracion_estimada"));
                }
                dr.Close();
            }
            catch (Exception ex) { }
            finally { if (cn != null) cn.Close(); }
            return a;
        }

        public static DataTable cargarGrillaUsuario(string nombre)
        {
            OleDbConnection cn = null;
            DataTable dt = new DataTable();
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;

                if(string.IsNullOrEmpty(nombre))
                {
                    cmd.CommandText = "SELECT nombre_usuario as Usuario, password as Contraseña, nombre as Nombre From Usuarios";
                }
                else
                {
                    cmd.CommandText = "SELECT nombre_usuario as Usuario, password as Contraseña, nombre as Nombre From Usuarios Where nombre_usuario like '%" + nombre + "%'";
                    //cmd.Parameters.AddWithValue("@Nombre", nombre);
                }
                dt.Load(cmd.ExecuteReader()); ;
                cn.Close();
            }
            catch (Exception ex)
            {
                dt = null;
            }
            finally { if (cn != null) cn.Close(); }
            return dt;
        }

        public static Boolean modificarUsuario(string nombre, Usuario u)
        {
            OleDbConnection cn = null;
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;


                //cmd.CommandText = "Update Usuarios set nombre_usuario=@nombreUsuario, [password]=@password, nombre=@nombre Where nombre_usuario= '" + nombre + "'";
                cmd.CommandText = "Update Usuarios set nombre_usuario=@nombreUsuario, [password]=@password, nombre=@nombre Where nombre_usuario=@NombreViejo";
                cmd.Parameters.AddWithValue("@NombreViejo", nombre);
                cmd.Parameters.AddWithValue("@nombreUsuario", u.Nombre_usuario);
                cmd.Parameters.AddWithValue("@nombre", u.Nombre);
                cmd.Parameters.AddWithValue("@password", u.Password);


                cmd.ExecuteNonQuery();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
            finally { if (cn != null) cn.Close(); }


        }
        public static Boolean eliminarUsuario(string nombre)
        {
            OleDbConnection cn = null;
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;
                cmd.CommandText = "Delete From Usuarios Where nombre_usuario= @Nombre";
                cmd.Parameters.AddWithValue("@Nombre", nombre);

                cmd.ExecuteNonQuery();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
            finally { if (cn != null) cn.Close(); }


        }
        public static List<Proyecto> CargarGrillaProyectos(string nombre)
        {
            List<Proyecto> lista = new List<Proyecto>();
            OleDbConnection cn = null;
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;
                if (nombre == null || nombre == "")
                {
                    cmd.CommandText = "Select p.id_proyecto, p.nombre, p.participantes, p.descripcion FROM Proyecto p WHERE p.estado='si'";
                }
                else
                {
                    cmd.CommandText = "Select p.id_proyecto, p.nombre, p.participantes, p.descripcion FROM Proyecto p WHERE p.estado='si' AND p.nombre LIKE @Nombre ";
                    cmd.Parameters.AddWithValue("@Nombre","%" + nombre + "%");

                }
                OleDbDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    Proyecto p = new Proyecto();
                    p.IdProyecto = int.Parse(dr["id_proyecto"].ToString());
                    p.Nombre = dr["nombre"].ToString();
                    p.Participantes = dr["participantes"].ToString();
                    p.Descripcion = dr["descripcion"].ToString();
                    lista.Add(p);
                }
            }
            catch (Exception ex)
            {
            }
            finally { if (cn != null) cn.Close(); }
            return lista;
        }


        public static Boolean agregarProyecto(Proyecto p)
        {
            OleDbConnection cn = null;
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;
                cmd.CommandText = "Insert into Proyecto (nombre,descripcion,participantes,estado) VALUES (@nombre, @descripcion,@participantes,@estado)";
                cmd.Parameters.AddWithValue("@nombre", p.Nombre);
                cmd.Parameters.AddWithValue("@descripcion", p.Descripcion);
                cmd.Parameters.AddWithValue("@participantes", p.Participantes);
                cmd.Parameters.AddWithValue("@estado", "si");

                cmd.ExecuteNonQuery();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
            finally { if (cn != null) cn.Close(); }
        }
        public static Boolean modificarProyecto(int id, Proyecto p)
        {
            OleDbConnection cn = null;
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;


                cmd.CommandText = "Update Proyecto set nombre=@nombre, descripcion=@descripcion, participantes=@participantes Where id_proyecto=" + id;

                cmd.Parameters.AddWithValue("@nombre", p.Nombre);
                cmd.Parameters.AddWithValue("@descripcion", p.Descripcion);
                cmd.Parameters.AddWithValue("@participantes", p.Participantes);




                cmd.ExecuteNonQuery();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
            finally { if (cn != null) cn.Close(); }


        }
        public static Boolean eliminarProyecto(int id)
        {
            OleDbConnection cn = null;
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;
                cmd.CommandText = "SELECT p.id_proyecto FROM (Proyecto p INNER JOIN Agendas a ON p.id_proyecto = a.proyecto_id) WHERE (p.id_proyecto = @id)";
                cmd.Parameters.AddWithValue("@Id", id);
                OleDbDataReader dr = cmd.ExecuteReader();
                if (dr.Read())
                {
                    return false;
                }
                else
                {
                    dr.Close();
                    cmd.CommandText = "Update Proyecto Set estado=@estado Where id_proyecto=@Id";
                    cmd.Parameters.AddWithValue("@Id", id);
                    cmd.Parameters.AddWithValue("@estado", "no");
                    cmd.ExecuteNonQuery();
                }
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
            finally { cn.Close(); }
        }

        //che onda que este metodo no se usa... =S
        public static void AsignarTipoReunionAProyecto(Proyecto p, List<int> tipos)
        {
            OleDbConnection cn = null;
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;
                int i = 0;
                foreach (int tipo in tipos)
                {
                    i++;
                    cmd.CommandText = "Insert INTO TipoReunionPorProyecto (id_tipo_reunion_x, id_proyecto) Values (@TipoReunion, @IdProyecto)";
                    cmd.Parameters.AddWithValue("@TipoReunion", tipo);
                    cmd.Parameters.AddWithValue("@IdProyecto", p.IdProyecto);
                    cmd.ExecuteNonQuery();
                }

                //string cadena = "Insert INTO TipoReunionPorProyecto (id_tipo_reunion_x, id_proyecto) Values (" + tipos.ElementAt(0) + ", @IdProyecto)";
                //cmd.Parameters.AddWithValue("@Elemento",tipos.ElementAt(0));
                //for (int i = 1; i < tipos.Count; i++)
                //{
                //    cadena += ", (" + tipos.ElementAt(i) + ", @IdProyecto)";
                //}
                //cmd.CommandText = cadena;
                //cmd.Parameters.Add(new OleDbParameter("@IdProyecto", p.IdProyecto));
                //cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { }
            finally { cn.Close(); }
        }

        public static DataTable ReuinionesPorProyecto(Proyecto p)
        {
            OleDbConnection cn = null;
            DataTable dt = new DataTable();
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;
                cmd.CommandText = "SELECT t.id_tipo_reunion, t.nombre_tipo_reunion, t.descripcion_tipo_reunion FROM TipoReunion t, TipoReunionPorProyecto trp WHERE t.id_tipo_reunion=trp.id_tipo_reunionx AND trp.id_proyecto=@IdProyecto";
                cmd.Parameters.AddWithValue("@IdProyecto", p.IdProyecto);

                dt.Load(cmd.ExecuteReader());
            }
            catch (Exception ex)
            {
            }
            finally { cn.Close(); }
            return dt;
        }
        public static DataTable TipoReunionNoProyecto(Proyecto p)
        {
            OleDbConnection cn = null;
            DataTable dt = new DataTable();
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;
                cmd.CommandText = "SELECT id_tipo_reunion, nombre_tipo_reunion, descripcion_tipo_reunion FROM TipoReunion WHERE id_tipo_reunion NOT IN (SELECT t.id_tipo_reunion FROM TipoReunion t INNER JOIN TipoReunionPorProyecto trp ON t.id_tipo_reunion = trp.id_tipo_reunionx WHERE trp.id_proyecto = @IdProyecto)";
                cmd.Parameters.AddWithValue("@IdProyecto", p.IdProyecto);
                dt.Load(cmd.ExecuteReader());
            }
            catch (Exception ex)
            {
            }
            finally { cn.Close(); }
            return dt;
        }


        public static void AgregarTipoReunionAProyecto(Proyecto p, int t)
        {
            OleDbConnection cn = null;
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;
                cmd.CommandText = "Insert INTO TipoReunionPorProyecto (id_tipo_reunionx, id_proyecto) Values (@TipoReunion, @IdProyecto)";//(" + t + ", " + p.IdProyecto + ")";//

                cmd.Parameters.AddWithValue("@TipoReunion", t);
                cmd.Parameters.AddWithValue("@IdProyecto", p.IdProyecto);
                
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { }
            finally { cn.Close(); }
        }

        public static void QuitarTipoReunionAProyecto(Proyecto p, int t)
        {
            OleDbConnection cn = null;
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;
                cmd.CommandText = "DELETE FROM TipoReunionPorProyecto WHERE id_tipo_reunionx=@TipoReunion AND id_proyecto=@IdProyecto";
                cmd.Parameters.AddWithValue("@IdProyecto", p.IdProyecto);
                cmd.Parameters.AddWithValue("@TipoReunion", t);
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { }
            finally { cn.Close(); }
        }


        public static DataTable CargarGrillaUsuarios(string nombre)
        {
            OleDbConnection cn = null;
            DataTable dt = new DataTable();
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;

                if (string.IsNullOrEmpty(nombre))
                {
                    cmd.CommandText = "Select u.nombre,u.nombre_usuario FROM Usuarios u";
                }
                else
                {
                    cmd.CommandText = "Select u.nombre,u.nombre_usuario FROM Usuarios u WHERE u.nombre LIKE @Nombre";
                    cmd.Parameters.AddWithValue("@Nombre","%" + nombre + "%"); 
                }



                dt.Load(cmd.ExecuteReader());

                return dt;

            }
            catch (Exception ex)
            {
                return dt;
            }
            finally { if (cn != null) cn.Close(); }
        }

        public static Boolean agregarAccion(Accion a)
        {
            OleDbConnection cn = null;
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;
                //cmd.CommandText = "Insert into Accion (nombre,descripcion,fecha_actual,fecha_completitud,usuario,estado,id_reunion) VALUES ('"+a.Nombre+"', '"+a.Descripcion+"',#"+DateTime.Now+"#,#"+a.Fecha_completitud+"#,'"+a.Usuario+"','"+a.Estado+"',"+a.Id_reunion+")";
                cmd.CommandText = "Insert into Accion (nombre,descripcion,fecha_actual,fecha_completitud,usuario,estado,id_reunion) VALUES (@Nombre, @Descripcion, @FechaActual, @FechaCompletitud, @Usuario, @Estado, @IdReunion)";
                cmd.Parameters.AddWithValue("@Nombre", a.Nombre);
                cmd.Parameters.AddWithValue("@Descripcion", a.Descripcion);
                cmd.Parameters.AddWithValue("@FechaActual", DateTime.Today);
                cmd.Parameters.AddWithValue("@FechaCompletitud", a.Fecha_completitud);
                cmd.Parameters.AddWithValue("@Usuario", a.Usuario);
                cmd.Parameters.AddWithValue("@Estado", a.Estado);
                cmd.Parameters.AddWithValue("@IdReunion", a.Id_reunion);

                cmd.ExecuteNonQuery();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
            finally { if (cn != null) cn.Close(); }
        }

        public static DataTable CargarGrillaAcciones(int reunion, Proyecto p)
        {
            OleDbConnection cn = null;
            DataTable dt = new DataTable();
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;

                if (reunion == 0)
                {
                    cmd.CommandText = "Select a.id_accion, a.nombre, a.descripcion, a.fecha_actual, a.fecha_completitud, a.usuario, a.estado, a.id_reunion FROM Accion a, Agendas ag WHERE ag.id_reunion=a.id_reunion AND ag.proyecto_id=@IdProyecto";
                    cmd.Parameters.AddWithValue("@IdProyecto", p.IdProyecto);
                }
                else
                {
                    cmd.CommandText = "Select a.id_accion, a.nombre, a.descripcion, a.fecha_actual, a.fecha_completitud, a.usuario, a.estado, a.id_reunion FROM Accion a WHERE id_reunion=@Reunion";
                    cmd.Parameters.AddWithValue("@Reunion", reunion);
                }

                dt.Load(cmd.ExecuteReader());

                return dt;

            }

            catch (Exception ex)
            {
                return dt;
            }
            finally { if (cn != null) cn.Close(); }
        }
        public static DataTable CargarGrillaAccionesPorTipoReunion(int tipoReunion, Proyecto p)
        {
            OleDbConnection cn = null;
            DataTable dt = new DataTable();
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;

                //cmd.CommandText = "Select a.* FROM Accion a,Agendas ag WHERE ag.id_reunion=a.id_reunion AND ag.proyecto_id=" + p.IdProyecto + " AND ag.tipo_reunion_id=" + tipoReunion;
                cmd.CommandText = "Select a.* FROM Accion a,Agendas ag WHERE ag.id_reunion=a.id_reunion AND ag.proyecto_id=@IdProyecto AND ag.tipo_reunion_id=@TipoReunion";
                cmd.Parameters.AddWithValue("@IdProyecto", p.IdProyecto);
                cmd.Parameters.AddWithValue("@TipoReunion", tipoReunion);

                dt.Load(cmd.ExecuteReader());

                return dt;

            }

            catch (Exception ex)
            {
                return dt;
            }
            finally { if (cn != null) cn.Close(); }
        }

        public static DataTable CargarGrillaAccionesPorEstado(String estado, Proyecto p)
        {
            OleDbConnection cn = null;
            DataTable dt = new DataTable();
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;

                //cmd.CommandText = "Select a.* FROM Accion a, Agendas ag WHERE a.id_reunion=ag.id_reunion AND ag.proyecto_id=" + p.IdProyecto + " AND a.estado like '" + estado + "'";
                cmd.CommandText = "Select a.* FROM Accion a, Agendas ag WHERE a.id_reunion=ag.id_reunion AND ag.proyecto_id=@IdProyecto AND a.estado like @Estado";
                cmd.Parameters.AddWithValue("@IdProyecto", p.IdProyecto);
                cmd.Parameters.AddWithValue("@Estado", estado);


                dt.Load(cmd.ExecuteReader());

                return dt;

            }

            catch (Exception ex)
            {
                return dt;
            }
            finally { if (cn != null) cn.Close(); }
        }

        public static int obternerIdReunion(DateTime fecha)
        {
            OleDbConnection cn = null;
            int id = 0;
            DataTable dt = new DataTable();
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;

                cmd.CommandText = "Select id_reunion from Agendas WHERE fecha_hora_reunion=@Fecha";
                cmd.Parameters.AddWithValue("@Fecha", fecha);

                dt.Load(cmd.ExecuteReader());
                id = int.Parse(dt.Rows[0][0].ToString());

                return id;

            }
            catch (Exception ex)
            {
                return id;
            }
            finally { if (cn != null) cn.Close(); }

        }

        public static Boolean modificarAccion(Accion a)
        {
            OleDbConnection cn = null;
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;
                cmd.CommandText = "Update Accion Set nombre=@Nombre, descripcion=@Descripcion, fecha_actual=@FechaActual, fecha_completitud=@FechaCompletitud, usuario=@Usuario, estado=@Estado Where id_accion=@IdAccion";
                cmd.Parameters.AddWithValue("@Nombre", a.Nombre);
                cmd.Parameters.AddWithValue("@Descripcion", a.Descripcion);
                cmd.Parameters.AddWithValue("@FechaActual", DateTime.Today);
                cmd.Parameters.AddWithValue("@FechaCompletitud", a.Fecha_completitud);
                cmd.Parameters.AddWithValue("@Usuario", a.Usuario);
                cmd.Parameters.AddWithValue("@Estado", a.Estado);
                cmd.Parameters.AddWithValue("@IdAccion", a.Id);


                cmd.ExecuteNonQuery();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
            finally { cn.Close(); }

        }

        public static Boolean eliminarAccion(int idAccion)
        {
            OleDbConnection cn = null;
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;
                cmd.CommandText = "Delete From Accion Where id_accion=@IdAccion";
                cmd.Parameters.AddWithValue("@IdAccion", idAccion);

                cmd.ExecuteNonQuery();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
            finally { if (cn != null) cn.Close(); }


        }

        //public static List<string> CargarGrillaAsistencia(int idReunion)
        //{
        //    OleDbConnection cn = null;
        //    List<string> lista = new List<string>();
        //    Agenda a = new Agenda();
        //    try
        //    {
        //        cn = Conectar();
        //        OleDbCommand cmd = new OleDbCommand();
        //        cmd.Connection = cn;

        //        cmd.CommandText = "Select a.participante from Agendas a where a.id_reunion=" + idReunion;
        //        OleDbDataReader dr = cmd.ExecuteReader();
        //        while (dr.Read())
        //        {
        //            a.Participantes = dr["participante"].ToString();
        //        }
        //        string participantes = a.Participantes.ToString();
        //        string[] split = participantes.Split(new Char[] { ' ', ',', '.', ':', '\t' });
        //        foreach (string s in split)
        //        {
        //            if (s.Trim() != "")
        //                lista.Add(s);
        //        }
        //        return lista;
        //    }

        //    catch (Exception ex)
        //    {
        //        return lista;
        //    }
        //    finally { if (cn != null) cn.Close(); }
        //}
        public static DataTable ObtenerUsuariosNomnbre(string nombre)
        {
            OleDbConnection cn = null;
            DataTable dt = new DataTable();
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;

                if (string.IsNullOrEmpty(nombre))
                {
                    cmd.CommandText = "Select u.nombre,u.nombre_usuario FROM Usuarios u";
                }
                else
                {
                    cmd.CommandText = "Select u.nombre,u.nombre_usuario FROM Usuarios u WHERE u.nombre LIKE @Nombre";
                    cmd.Parameters.AddWithValue("@Nombre","%" + nombre + "%");
                }

                dt.Load(cmd.ExecuteReader());

                return dt;

            }
            catch (Exception ex)
            {
                return dt;
            }
            finally { if (cn != null) cn.Close(); }
        }
        public static DataTable CargarGrillaAsistencias(Agenda a)
        {
            OleDbConnection cn = null;
            List<Usuario> lista = new List<Usuario>();
            Usuario user = new Usuario();
            DataTable dt = new DataTable();
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;

                cmd.CommandText = "SELECT u.nombre_usuario, ppr.asistio FROM ParticipatesPorReunion ppr, Usuarios u where ppr.nombre_usuario=u.nombre_usuario AND ppr.id_reunion=@IdReunion";
                cmd.Parameters.AddWithValue("@IdReunion", a.IdReunion);
                dt.Load(cmd.ExecuteReader());
                //OleDbDataReader dr = cmd.ExecuteReader();
                //while (dr.Read())
                //{
                //    user.Nombre_usuario = dr["nombre_usuario"].ToString();
                //    user.Nombre = dr["nombre"].ToString();
                //    user.Password = dr["passowrd"].ToString();
                //    lista.Add(user);
                //    //a.Participantes = dr["participante"].ToString();
                //}
                //string participantes = a.Participantes.ToString();
                //string[] split = participantes.Split(new Char[] { ' ', ',', '.', ':', '\t' });
                //foreach (string s in split)
                //{
                //    if (s.Trim() != "")
                //        lista.Add(s);
                //}
                //return lista;
                return dt;
            }

            catch (Exception ex)
            {
                return dt;
            }
            finally { if (cn != null) cn.Close(); }
        }

        //Este No Se usa!!!
        public static void guardarAsistencia(List<string> lista) 
        {
            OleDbConnection cn = null;
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;
                for (int i = 0; i < lista.Count; i++)
			    {
                    var campo = lista[i].ToString();
                    //VER ! 
                    //cmd.CommandText = "Update ParticipatesPorReunion Set nombre_usuario=@nombre, asistio=@asistio";
                    //cmd.Parameters.Add(new OleDbParameter("@nombre", nom));
                    //cmd.Parameters.Add(new OleDbParameter("@descripcion", a.Descripcion));
                    //cmd.ExecuteReader();
			    }             
                
            }
            catch (Exception ex)
            {
                
            }
            finally { if (cn != null) cn.Close(); }

        }

        public static void GuardarAsistencia(List<UsuarioPorReunion> lista, int idReunion)
        {
             OleDbConnection cn = null;
             try
             {
                 cn = Conectar();
                 OleDbCommand cmd = new OleDbCommand();
                 foreach (UsuarioPorReunion user in lista)
                 {
                     //cmd.CommandText = "UPDATE ParticipatesPorReunion SET asistio=" + user.Asistio + " WHERE id_reunion=" + idReunion + " AND nombre_usuario='" + user.NombreUsuario + "'";
                     cmd = null;
                     cmd = new OleDbCommand();
                     cmd.Connection = cn;
                     cmd.CommandText = "UPDATE ParticipatesPorReunion SET asistio=@Asistio WHERE id_reunion=@IdReunion AND nombre_usuario=@NombreUsuario";
                     cmd.Parameters.AddWithValue("@Asistio", user.Asistio);
                     cmd.Parameters.AddWithValue("@IdReunion", idReunion);
                     cmd.Parameters.AddWithValue("@NombreUsuario", user.NombreUsuario);
                     cmd.ExecuteNonQuery();
                 }
             }
             catch (Exception ex) { }
             finally { if (cn != null) cn.Close(); }
        }

        public static DataTable CargarUsuariosPorFiltro(string nombreUS)
        {
            OleDbConnection cn = null;
            DataTable dt = new DataTable();
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;

                if (string.IsNullOrEmpty(nombreUS))
                {
                    cmd.CommandText = "Select u.nombre,u.nombre_usuario FROM Usuarios u";
                }
                else
                {
                    cmd.CommandText = "Select u.nombre,u.nombre_usuario FROM Usuarios u WHERE u.nombre_usuario LIKE @NombreUsuario";
                    cmd.Parameters.AddWithValue("@NombreUsuario", "%" + nombreUS + "%"); 
                }

                dt.Load(cmd.ExecuteReader());

                return dt;

            }
            catch (Exception ex) { }
            finally { if (cn != null) cn.Close(); }
            return null;
        }

        public static DataTable CargarUsuariosDeReunion(int idReunion)
        {
            OleDbConnection cn = null;
            DataTable dt = new DataTable();
            try
            {
                cn = Conectar();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = cn;

                if (idReunion ==0)
                {
                    cmd.CommandText = "Select u.nombre,u.nombre_usuario FROM Usuarios u";
                }
                else
                {
                    cmd.CommandText = "SELECT u.nombre,u.nombre_usuario FROM ParticipatesPorReunion ppr, Usuarios u where ppr.nombre_usuario=u.nombre_usuario AND ppr.id_reunion=@IdReunion";
                    cmd.Parameters.AddWithValue("@IdReunion", idReunion);
                }



                dt.Load(cmd.ExecuteReader());

                return dt;

            }
            catch (Exception ex) { }
            finally { if (cn != null) cn.Close(); }
            return null;
        }
    }
}


